"""
在幕后，for 语句会在容器对象上调用 iter()。
该函数返回一个定义了 __next__() 方法的迭代器对象，此方法将逐一访问容器中的元素。
当元素用尽时，__next__() 将引发 StopIteration 异常来通知终止 for 循环。
你可以使用 next() 内置函数来调用 __next__() 方法；
"""

s = 'abc'
it = iter(s)
print(it)

print(next(it))
print(next(it))
print(next(it))
try:
    print(next(it))
except StopIteration as e:
    print(f'元素用尽了{e}')


class Reverse:
    def __init__(self, data):
        self.data = data
        self.index = len(data)

    def __iter__(self):
        return self

    def __next__(self):
        if self.index == 0:
            raise StopIteration
        self.index = self.index - 1
        return self.data[self.index]


rev = Reverse('spam')
print(iter(rev))

for char in rev:
    print(char)